﻿using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data.SqlClient;
using System.Web.Configuration;
using log4net;
using TheBullysStore.Upload;

namespace TheBullysStore.Models.ModuloAdministracion.Edificio
{
    public class EdificioDAO
    {
        public static String cadenaDB = WebConfigurationManager.ConnectionStrings["TheBullysStore"].ConnectionString;
        private static ILog log = LogManager.GetLogger(typeof(EdificioDAO));
        public string RegistrarEdificio(EdificioBean edificio)
        {
            SqlConnection sqlCon = null;
            try
            {
                sqlCon = new SqlConnection(cadenaDB);

                sqlCon.Open();

                string commandString = "INSERT INTO Edificio (Id_Provincia, Id_Departamento, Num_Pisos, Num_Sotanos, Nombre, Id_Distrito, Direccion, Telefono, Id_Banco, cuenta_ahorros, contometro, tipo_prorrateo,tipoCuota,montoCuota, num_cochera, pago_inmobiliaria, num_deposito, estado) " +
                                       " VALUES (" + edificio.IdProvincia + "," + edificio.IdDepartamento + "," + edificio.NumPisos + "," + edificio.NumSotanos + ",'" + edificio.Nombre + "'," + edificio.IdDistrito + ",'" + edificio.Direccion + "','" + edificio.Telefono + "'," + edificio.IdBanco + ",'" + edificio.Cuenta + "'," + edificio.Contometro + ",'" + edificio.TipoProrrateo + "'," + edificio.TipoCuota + "," + edificio.MontoCuota + "," + edificio.NumCochera + "," + edificio.PagoInmobiliaria + "," + edificio.NumDeposito + ",1)";

                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);
                sqlCmd.ExecuteNonQuery();                

                edificio.Conexion = "Bien";
            }
            catch (Exception ex)
            {
                log.Error("registrarEdificio(EXCEPTION): ", ex);
                throw ex;
            }
            finally {
                sqlCon.Close();
            }

            return edificio.Conexion;
        }

        public Boolean ExisteEdificio(EdificioBean edificio)
        {
            SqlConnection sqlCon = null;
            try
            {
                sqlCon = new SqlConnection(cadenaDB);

                sqlCon.Open();

                string commandString = "SELECT * FROM Edificio WHERE nombre = '" + edificio.Nombre + "' AND direccion = '" + edificio.Direccion + "' AND id_distrito = " + edificio.IdDistrito + " AND estado = 1";


                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);

                SqlDataReader dataReader = sqlCmd.ExecuteReader();

                if (dataReader.Read())
                {
                    dataReader.Close();
                    return true;
                }
                else
                {
                    dataReader.Close();
                    return false;
                }
            }
            catch (Exception ex)
            {
                log.Error("existeEdificio(EXCEPTION): ", ex);
                throw ex;
            }
            finally {
                sqlCon.Close();
            }
        }

        public List<EdificioBean> ListarEdificio(EdificioBean edificio)
        {
            SqlConnection sqlCon = null;
            try
            {
                List<EdificioBean> listaedificio = new List<EdificioBean>();

                sqlCon = new SqlConnection(cadenaDB);

                sqlCon.Open();

                string commandString = "SELECT * FROM Edificio WHERE estado = 1";

                if (!string.IsNullOrEmpty(edificio.Nombre))
                {
                    commandString += " AND nombre LIKE '%" + edificio.Nombre + "%'";
                }
                if (edificio.IdDepartamento > 0)
                {
                    commandString += " AND Id_Departamento = " + edificio.IdDepartamento + "";
                }
                if (edificio.IdProvincia > 0)
                {
                    commandString += " AND Id_Provincia = " + edificio.IdProvincia + "";
                }
                if (edificio.IdDistrito > 0)
                {
                    commandString += " AND Id_Distrito = " + edificio.IdDistrito + "";
                }
                if (!string.IsNullOrEmpty(edificio.Direccion))
                {
                    commandString += " AND direccion LIKE '%" + edificio.Direccion + "%'";
                }
                if (!string.IsNullOrEmpty(edificio.Telefono))
                {
                    commandString += " AND telefono LIKE '%" + edificio.Telefono + "%'";
                }
                if (edificio.Contometro > 0)
                {
                    commandString += " AND Contometro = " + edificio.Contometro + "";
                }
                if (edificio.TipoCuota > 0)
                {
                    commandString += " AND tipoCuota = " + edificio.TipoCuota + "";
                }
                if (!string.IsNullOrEmpty(edificio.TipoProrrateo))
                {
                    commandString += " AND Tipo_Prorrateo = '" + edificio.TipoProrrateo + "'";
                }

                if (edificio.IdBanco > 0)
                {
                    commandString += " AND Id_Banco = " + edificio.IdBanco + "";
                }

                if (!string.IsNullOrEmpty(edificio.Cuenta))
                {
                    commandString += " AND cuenta_ahorros LIKE '%" + edificio.Cuenta + "%'";
                }

                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);

                SqlDataReader dataReader = sqlCmd.ExecuteReader();

                while (dataReader.Read())
                {
                    EdificioBean Edificio = new EdificioBean();
                    Edificio.IdEdificio = Convert.ToInt32(dataReader["Id_Edificio"]);
                    Edificio.Nombre = Convert.ToString(dataReader["Nombre"]);
                    Edificio.IdDepartamento = Convert.ToInt32(dataReader["Id_Departamento"]);
                    Edificio.IdProvincia = Convert.ToInt32(dataReader["Id_Provincia"]);
                    Edificio.IdDistrito = Convert.ToInt32(dataReader["Id_Distrito"]);
                    Edificio.Direccion = Convert.ToString(dataReader["Direccion"]);
                    Edificio.Telefono = Convert.ToString(dataReader["Telefono"]);
                    Edificio.IdBanco = Convert.ToInt32(dataReader["Id_Banco"]);
                    Edificio.Cuenta = Convert.ToString(dataReader["cuenta_ahorros"]);
                    Edificio.Contometro = Convert.ToInt32(dataReader["Contometro"]);
                    Edificio.TipoProrrateo = Convert.ToString(dataReader["Tipo_Prorrateo"]);
                    Edificio.NumCochera = Convert.ToDouble(dataReader["Num_Cochera"]);
                    Edificio.PagoInmobiliaria = Convert.ToDouble(dataReader["Pago_Inmobiliaria"]);
                    Edificio.NumDeposito = Convert.ToDouble(dataReader["Num_Deposito"]);
                    Edificio.Estado = Convert.ToInt32(dataReader["estado"]);
                    Edificio.NumPisos = Convert.ToInt32(dataReader["Num_Pisos"]);
                    Edificio.NumSotanos = Convert.ToInt32(dataReader["Num_Sotanos"]);
                    Edificio.TipoCuota = Convert.ToInt32(dataReader["TipoCuota"]);
                    Edificio.MontoCuota = Convert.ToDouble(dataReader["montoCuota"]);
                    listaedificio.Add(Edificio);
                }
                dataReader.Close();                

                return listaedificio;
            }
            catch (Exception ex)
            {
                log.Error("listarEdificio(EXCEPTION): ", ex);
                throw ex;
            }
            finally {
                sqlCon.Close();
            }
        }

        public string ModificarEdificio(EdificioBean edificio)
        {
            SqlConnection sqlCon = null;

            try
            {
                sqlCon = new SqlConnection(cadenaDB);

                sqlCon.Open();

                string commandString = "UPDATE Edificio SET " +
                                       "Nombre = '" + edificio.Nombre + "', " +
                                       "Id_Departamento = " + edificio.IdDepartamento + ", " +
                                       "Id_Provincia = " + edificio.IdProvincia + ", " +
                                       "Id_Distrito = " + edificio.IdDistrito + ", " +
                                       "Direccion = '" + edificio.Direccion + "' , " +
                                       "Telefono = '" + edificio.Telefono + "', " +
                                       "Id_Banco = " + edificio.IdBanco + ", " +
                                       "Num_Pisos = " + edificio.NumPisos + ", " +
                                       "Num_Sotanos =" + edificio.NumSotanos + ", " +
                                       "cuenta_ahorros = '" + edificio.Cuenta + "', " +
                                       "Contometro = " + edificio.Contometro + ", " +
                                       "Tipo_Prorrateo = '" + edificio.TipoProrrateo + "', " +
                                       "Num_Cochera = " + edificio.NumCochera + ", " +
                                       "Pago_Inmobiliaria = " + edificio.PagoInmobiliaria + ", " +
                                       "Num_Deposito = " + edificio.NumDeposito + ", " +
                                       "montoCuota = " + edificio.MontoCuota + ", " +
                                       "tipoCuota = " + edificio.TipoCuota + " " +
                                       "WHERE Id_Edificio = " + edificio.IdEdificio + "";

                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);

                sqlCmd.ExecuteNonQuery();                

                edificio.Conexion = "Bien";

            }
            catch (Exception ex)
            {
                log.Error("ModificarEdificio(EXCEPTION): ", ex);
                throw ex;
            }
            finally {
                sqlCon.Close();
            }
            return edificio.Conexion;
        }

        public string EliminarEdificio(EdificioBean edificio)
        {
            SqlConnection sqlCon=null;
            try
            {
                sqlCon = new SqlConnection(cadenaDB);

                sqlCon.Open();

                string commandString = "UPDATE Edificio SET Estado = 0 WHERE Id_Edificio = " + edificio.IdEdificio + "";
                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);
                sqlCmd.ExecuteNonQuery();

                edificio.Conexion = "Bien";
            }
            catch (Exception ex)
            {
                log.Error("EliminarEdificio(EXCEPTION): ", ex);
                throw ex;
            }
            finally
            {
                sqlCon.Close();
            }
            return edificio.Conexion;
        }

        public List<int> ListarPiso(EdificioBean edificio)
        {
            SqlConnection sqlCon = null;
            try
            {
                List<int> listapiso = new List<int>();

                int num_pisos, num_sotanos;

                sqlCon = new SqlConnection(cadenaDB);

                sqlCon.Open();

                string commandString = "SELECT num_pisos,num_sotanos FROM Edificio WHERE id_edificio = " + edificio.IdEdificio + "";
                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);

                SqlDataReader dataReader = sqlCmd.ExecuteReader();

                while (dataReader.Read())
                {
                    num_pisos = Convert.ToInt32(dataReader["Num_Pisos"]);
                    num_sotanos = Convert.ToInt32(dataReader["Num_Sotanos"]);
                    listapiso.Add(num_pisos);
                    listapiso.Add(num_sotanos);
                }

                dataReader.Close();

                return listapiso;

            }
            catch (Exception ex)
            {
                log.Error("ListarPiso(EXCEPTION): ", ex);
                throw ex;
            }
            finally
            {
                sqlCon.Close();            
            }
        }

        public EdificioBean AtributosEdificio(EdificioBean edificio)
        {
            SqlConnection sqlCon = null;
            try
            {

                sqlCon = new SqlConnection(cadenaDB);

                sqlCon.Open();

                string commandString = "SELECT * FROM Edificio WHERE Id_Edificio = " + edificio.IdEdificio + "";

                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);

                SqlDataReader dataReader = sqlCmd.ExecuteReader();
                EdificioBean Edificio = new EdificioBean();

                while (dataReader.Read())
                {

                    Edificio.IdEdificio = Convert.ToInt32(dataReader["Id_Edificio"]);
                    Edificio.Nombre = Convert.ToString(dataReader["Nombre"]);
                    Edificio.IdDepartamento = Convert.ToInt32(dataReader["Id_Departamento"]);
                    Edificio.IdProvincia = Convert.ToInt32(dataReader["Id_Provincia"]);
                    Edificio.IdDistrito = Convert.ToInt32(dataReader["Id_Distrito"]);
                    Edificio.Direccion = Convert.ToString(dataReader["Direccion"]);
                    Edificio.Telefono = Convert.ToString(dataReader["Telefono"]);
                    Edificio.IdBanco = Convert.ToInt32(dataReader["Id_Banco"]);
                    Edificio.Cuenta = Convert.ToString(dataReader["cuenta_ahorros"]);
                    Edificio.Contometro = Convert.ToInt32(dataReader["Contometro"]);
                    Edificio.TipoProrrateo = Convert.ToString(dataReader["Tipo_Prorrateo"]);
                    Edificio.NumCochera = Convert.ToDouble(dataReader["Num_Cochera"]);
                    Edificio.PagoInmobiliaria = Convert.ToDouble(dataReader["Pago_Inmobiliaria"]);
                    Edificio.NumDeposito = Convert.ToDouble(dataReader["Num_Deposito"]);
                    Edificio.Estado = Convert.ToInt32(dataReader["estado"]);
                    Edificio.NumPisos = Convert.ToInt32(dataReader["Num_Pisos"]);
                    Edificio.NumSotanos = Convert.ToInt32(dataReader["Num_Sotanos"]);
                    Edificio.TipoCuota = Convert.ToInt32(dataReader["TipoCuota"]);
                    Edificio.MontoCuota = Convert.ToDouble(dataReader["montoCuota"]);

                }
                dataReader.Close();                

                return Edificio;
            }
            catch (Exception ex)
            {
                log.Error("AtributosEdificio(EXCEPTION): ", ex);
                throw ex;
            }
            finally {
                sqlCon.Close();
            }
        }

        public List<EdificioBean> SetearEdificio(EdificioBean edificio)
        {
            SqlConnection sqlCon = null;
            try
            {
                List<EdificioBean> listaedificio = new List<EdificioBean>();

                sqlCon = new SqlConnection(cadenaDB);

                sqlCon.Open();

                string commandString = "SELECT Nombre FROM Edificio WHERE id_edificio = " + edificio.IdEdificio;

                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);

                SqlDataReader dataReader = sqlCmd.ExecuteReader();

                while (dataReader.Read())
                {
                    EdificioBean Edificio = new EdificioBean();
                    Edificio.Nombre = Convert.ToString(dataReader["Nombre"]);
                    listaedificio.Add(Edificio);
                }
                dataReader.Close();

                return listaedificio;
            }
            catch (Exception ex)
            {
                log.Error("listarEdificio(EXCEPTION): ", ex);
                throw ex;
            }
            finally
            {
                sqlCon.Close();
            }
        }

        public List<EdificioBean> ListarEdificioNulo(EdificioBean edificio)
        {
            SqlConnection sqlCon = null;
            try
            {
                List<EdificioBean> listaedificionulo = new List<EdificioBean>();

                sqlCon = new SqlConnection(cadenaDB);

                sqlCon.Open();

                string commandString = "SELECT * FROM Edificio WHERE estado = 3";

                if (!string.IsNullOrEmpty(edificio.Nombre))
                {
                    commandString += " AND nombre LIKE '%" + edificio.Nombre + "%'";
                }

                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);

                SqlDataReader dataReader = sqlCmd.ExecuteReader();

                while (dataReader.Read())
                {
                    EdificioBean Edificio = new EdificioBean();
                    Edificio.IdEdificio = Convert.ToInt32(dataReader["Id_Edificio"]);
                    listaedificionulo.Add(Edificio);
                }
                dataReader.Close();

                return listaedificionulo;
            }
            catch (Exception ex)
            {
                log.Error("listarEdificio(EXCEPTION): ", ex);
                throw ex;
            }
            finally
            {
                sqlCon.Close();
            }
        }


        public static string Subir(List<EdificioFilesStatus> statuses, string IdEdificio)
        {
            SqlConnection sqlCon = null;
            try
            {
                //"(convert(datetime,'" + mantenimientoPreventivo.Fecha + "',103), '"
                String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["TheBullysStore"].ConnectionString;

                sqlCon = new SqlConnection(cadenaConfiguracion);

                for (int i = 0; i < statuses.Count ; i++)
                {
                    sqlCon.Open();
                    string commandString = "UPDATE Edificio SET " +
                                           "DirLogo = '" + statuses[i].name + "' WHERE id_Edificio = " + IdEdificio + "";

                    SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);
                    sqlCmd.ExecuteNonQuery();
                    sqlCon.Close();
                }
                return "Bien";

            }

            catch (Exception ex)
            {
                log.Error("RegistrarMantenimientoPreventivo(EXCEPTION): ", ex);
                throw ex;
            }
            finally
            {
                sqlCon.Close();
            }
        }

        public static string Borrar(string filePath, string IdEdificio)
        {
            SqlConnection sqlCon = null;
            try
            {
                String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["TheBullysStore"].ConnectionString;

                sqlCon = new SqlConnection(cadenaConfiguracion);

                sqlCon.Open();

                string commandString = "UPDATE Edificio SET " +
                                       "DirLogo = '' WHERE id_Edificio = " + IdEdificio + "";

                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);

                sqlCmd.ExecuteNonQuery();

                sqlCon.Close();

                return "Bien";

            }
            catch (Exception ex)
            {
                log.Error("Borrar(EXCEPTION): ", ex);
                throw ex;
            }
            finally
            {
                sqlCon.Close();
            }
        }
    }
}